perm filename SAVRES.SAI[SYS,HE]5 blob sn#060872 filedate 1973-08-30 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00010 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	SAVRES - save and restore procedures
C00005 00003	_ FILESP, EDSAVE
C00007 00004	_ EDREST
C00011 00005	_ LISAVE
C00013 00006	_ LIREST
C00015 00007	_ PRSAVE
C00020 00008	_ PRREST
C00023 00009	_ GETLINES
C00025 00010	_ OUTLINES
C00027 ENDMK
C⊗;
COMMENT SAVRES - save and restore procedures
  used at will, and automatically in the expansion/contraction schemes;

ENTRY FILESP,EDSAVE,EDREST,LISAVE,LIREST,PRSAVE,PRREST;

BEGIN "SAVRES"

DEFINE CL="'15&'12",
	BL="'40",
	_="COMMENT",
	QRETURN="BEGIN UNTELL; RETURN END",
	LOOP(I,J,K,L)="FOR I←J STEP L UNTIL K DO",
	QEP="EXTERNAL SIMPLE PROCEDURE",
	QEIP="EXTERNAL SIMPLE INTEGER PROCEDURE",
	QESP="EXTERNAL SIMPLE STRING PROCEDURE",
	QER="ERR←1",
	QI="INTEGER",
	QS="STRING",
	SAFEX="SAFE";


STRING A, C, EDFILE, EDPPN, PRFILE, PRPPN, LIFILE, LIPPN;
INTEGER BRAK1, BRK2, IMAN, NEP, KICH;

INTERNAL STRING B, JUNKSTR;
INTERNAL INTEGER DCHAN, EO, IG;
EXTERNAL INTEGER IDUM,IA,IB,IC,IE,WHERE,BRCHAR,NOEPA,NOL,MAXNOL,
	NOBAL,MAXNOV,NOUT,X,Y,ERR,MAXPLS,MAXPVS,NPRO,MXNPRO,PLTOT,
	PLFTOT,PCFTOT,PFTOT,PFFREE,MAXPLT,PFREE,NOV,NOEPL;

EXTERNAL STRING NAME,EDEXT,LIEXT,PREXT;
EXTERNAL REAL RDEP;

SAFEX INTEGER ARRAY LIM[1:4];
SAFEX  REAL ARRAY TFORM[1:15,1:3];

SAFEX EXTERNAL STRING ARRAY PNAME[1:1];
SAFEX EXTERNAL INTEGER ARRAY LE,LEDG1,LEDG2,LCREDE,LVERSI,LVERCO,LVER,
	LINK,PLINES,PVERTS,PPTRL,PLINEF,PLINE,PLINE2,PFLST,PFPRO,PFEAT[1:1],
	PFPTR[0:1],DICH[0:15];
SAFEX EXTERNAL REAL ARRAY EAX,EAY,EBX,EBY,XVCOR,YVCOR,SVANG,XLCOR,YLCOR,
	 CXL,CYL,CCL,RLEN,ANGARG[1:1];

	QEP UNTELL;
	QESP PL(QS S,T; QI I);
	QEP TELL(QS S);
	QESP QREAD;
	QEP SORTED;
	QEP SHUFFL;
	QEIP LACT(QI I);
_ FILESP, EDSAVE;

_ Reads in file, ext, ppn for (I=1) line-, (I=2) edge-,
	(I=3) prototype files;

INTERNAL SIMPLE PROCEDURE FILESP(INTEGER I);
	BEGIN "FILESP"
	JUNKSTR←QREAD;
	A←SCAN(JUNKSTR,2,BRK2);
	B←IF (IA←BRK2)='56 THEN IA&SCAN(JUNKSTR,2,BRK2) ELSE NULL;
	C←IF BRK2='133 THEN BRK2&JUNKSTR ELSE NULL;
	CASE I OF BEGIN ;
		BEGIN LIFILE←A; LIEXT←B; LIPPN←C END;
		BEGIN EDFILE←A; EDEXT←B; EDPPN←C END;
		BEGIN PRFILE←A; PREXT←B; PRPPN←C END
		  END
	END "FILESP";


_ Saves sorted edge-data;

INTERNAL SIMPLE PROCEDURE EDSAVE;
	BEGIN "EDSAVE"
	IF ¬NOEPA THEN RETURN;
	TELL("edge-save");
	OPEN(4,"DSK",'14,0,2,IDUM,BRCHAR,EO);
	IF EQU(EDEXT,".TEM") THEN BEGIN EDFILE←"EDSAVE"; EDPPN←NULL END;
	ENTER(4,EDFILE&EDEXT&EDPPN,IA);
	WORDOUT(4,NOEPA);
	WORDOUT(4,KICH);
	ARRYOUT(4,TFORM[1,1],45);
	WORDOUT(4,RDEP);
	ARRYOUT(4,LE[1],NOEPA);
	ARRYOUT(4,EAX[1],NOEPA);
	ARRYOUT(4,EAY[1],NOEPA);
	ARRYOUT(4,EBX[1],NOEPA);
	ARRYOUT(4,EBY[1],NOEPA);
	RELEASE(4);
	UNTELL
	END "EDSAVE";
_ EDREST;

_ Inputs edge-files;

INTERNAL SIMPLE PROCEDURE EDREST;
	BEGIN "EDREST"
	LABEL BA1,EDP,EDPV,EDOUT,EDPV1,EDPV2;
	REAL X,Y,DX,DY;
	IF WHERE≠11 THEN TELL("edge-input") ELSE GO EDP;
	IF EQU(EDEXT,".DAT") THEN IMAN←0 ELSE
	IF EQU(EDEXT,".EDG") THEN IMAN←1 ELSE
	IF EQU(EDEXT,".SED") THEN IMAN←2 ELSE
	IF EQU(EDEXT,".TEM") THEN
		BEGIN
		IF ¬NOEPA THEN RETURN;
		IMAN←3
		END ELSE BEGIN
		OUTSTR("WRONG EXT: "&EDEXT&CL);
		QER;
		QRETURN
		END;
	OPEN(4,"DSK",12*(IMAN%2),2,0,IDUM,BRAK1,EO);
	LOOKUP(4,JUNKSTR←EDFILE&EDEXT&EDPPN,IA);
	IF IA THEN
		BEGIN
		OUTSTR("FILE "&JUNKSTR&" NOT FOUND"&CL);
		RELEASE(4);
		QER;
		QRETURN
		END;
	IF IMAN≤2 THEN NOL ← NOV ← 0;
	CASE IMAN OF BEGIN
		BEGIN
			RDEP←REALIN(4);
			NOEPA←(NEP←INTIN(4))%2;
			LOOP(IA,1,4,1) LIM[IA]←INTIN(4)
		END;
		BEGIN
			INTIN(4);
			NEP←2*(NOEPA←INTIN(4)-1);
			RDEP←REALIN(4)/4.0
		END;
		BEGIN NEP←2*(NOEPA←WORDIN(4)); GO EDPV1 END;
		BEGIN IA←WORDIN(4); GO EDPV1 END
		     END;
	IF NOEPL<NOEPA THEN BEGIN WHERE←11; RETURN; END;

EDP:	IF IMAN THEN GO EDPV;
	IC←0;
	LOOP(IA,1,NEP,1)
		BEGIN "EDIN"
		IB←INTIN(4);
		IF IA MOD 2  THEN
			BEGIN
			IC←IC+1;
			EAX[IC]←(IB%10000000)/10;
			EAY[IC]←(IB%1000 MOD 10000)/10
			END ELSE BEGIN
			EBX[IC]←(IB%10000000)/10;
			EBY[IC]←(IB%1000 MOD 10000)/10
			END
	        END "EDIN";
	GO EDOUT;
EDPV:	IF IMAN≥2 THEN GO EDPV2;
	IC←0;
BA1:	IE←REALIN(4);
	IG←REALIN(4);
	REALIN(4);
	REALIN(4);
	LOOP(IA,1,IE,1)
		BEGIN
		X←REALIN(4);
		Y←REALIN(4);
		DX←REALIN(4);
		DY←REALIN(4);
		EAX[IC←IC+1]←X-DY*RDEP;
		EAY[IC]←256.-(Y+DX*RDEP);
		EBX[IC]←X+DY*RDEP;
		EBY[IC]←256.-(Y-DX*RDEP);
		END;
	IF IG THEN GO BA1;
	KICH←INTIN(4);
	LOOP(IA,1,KICH,1) LOOP(IC,1,3,1) TFORM[IA,IC]←REALIN(4);
	RDEP←RDEP*2.;
	GO EDOUT;
EDPV1:	KICH←WORDIN(4);
	ARRYIN(4,TFORM[1,1],45);
	ARRYIN(4,RDEP,1);
	IF IMAN=2∧NOEPL<NOEPA THEN BEGIN WHERE←11; RETURN; END;
EDPV2:	ARRYIN(4,LE[1],NOEPA);
	ARRYIN(4,EAX[1],NOEPA);
	ARRYIN(4,EAY[1],NOEPA);
	ARRYIN(4,EBX[1],NOEPA);
	ARRYIN(4,EBY[1],NOEPA);
EDOUT:	IF IMAN≤1 THEN SORTED;
	IF IMAN≤2 THEN DICH[2]←DICH[3]←1;
	IF IMAN=3 THEN RENAME(4,NULL,0,IA);
	RELEASE(4);
	UNTELL
	END "EDREST";
_ LISAVE;

_ Saves data-structure on line-level;

INTERNAL SIMPLE PROCEDURE LISAVE;
	BEGIN "LISAVE"

	INTEGER IA,IB,IC,ID;

	DEFINE AML(X)="ARRYOUT(IA,X[1],NOL)";
	DEFINE AMV(X)="ARRYOUT(IA,X[1],ID)";
	DEFINE AMC(X)="ARRYOUT(IA,X[1],NOV)";
	DEFINE WD(X)="WORDOUT(IA,X)";
	IF ¬NOL THEN RETURN;
	TELL("line-save");
	SHUFFL;
	ID←2*NOL;
	IF IC←EQU(LIEXT,".TEM") THEN BEGIN LIFILE←"LISAVE";LIPPN←NULL END;
	OPEN(IA←GETCHAN,"DSK",'14,0,2,IDUM,IB,EO);
	ENTER(IA,LIFILE&LIEXT&LIPPN,IB);
	IF ¬IC THEN BEGIN WD(NOL);WD(NOV); END;
	AML(LEDG1);
	AML(LEDG2);
	AML(LCREDE);
	AMC(LVERSI);
	AMV(LVERCO);
	AMV(LVER);
	AMV(LINK);
	AMC(XVCOR);
	AMC(YVCOR);
	AMV(SVANG);
	AMV(XLCOR);
	AMV(YLCOR);
	AML(CXL);
	AML(CYL);
	AML(CCL);
	AML(RLEN);
	AML(ANGARG);
	RELEASE(IA);
	UNTELL
	END "LISAVE";
_ LIREST;
_ Restores datastructure as saved by LISAVE;

INTERNAL SIMPLE PROCEDURE LIREST;
	BEGIN "LIREST" LABEL ON1;
	INTEGER IB,IC,ID;
	DEFINE AML(X)="ARRYIN(DCHAN,X[1],NOL)";
	DEFINE AMV(X)="ARRYIN(DCHAN,X[1],ID)";
	DEFINE AMC(X)="ARRYIN(DCHAN,X[1],NOV)";
	DEFINE WD(X)="X←WORDIN(DCHAN)";
	IF (IC←EQU(LIEXT,".TEM"))∧¬NOL THEN RETURN;
	ID←2*NOL;
	IF WHERE=8 THEN GO ON1;
	TELL("line-restore");
	OPEN(DCHAN←GETCHAN,"DSK",'14,2,0,IDUM,IB,EO);
	LOOKUP(DCHAN,JUNKSTR←LIFILE&LIEXT&LIPPN,IB);
	IF IB THEN
		BEGIN
		OUTSTR("FILE "&JUNKSTR&" NOT FOUND"&CL);
		RELEASE(DCHAN);
		QER;
		QRETURN
		END;
	IF IC THEN GO ON1;
	WD(NOL);
 	WD(NOV);
	IB ← NOBAL;
	NOBAL←NOL;
	IF NOL>IC THEN BEGIN WHERE←8;RETURN; END;

ON1:	AML(LEDG1);
	AML(LEDG2);
	AML(LCREDE);
	AMC(LVERSI);
	AMV(LVERCO);
	AMV(LVER);
	AMV(LINK);
	AMC(XVCOR);
	AMC(YVCOR);
	AMV(SVANG);
	AMV(XLCOR);
	AMV(YLCOR);
	AML(CXL);
	AML(CYL);
	AML(CCL);
	AML(RLEN);
	AML(ANGARG);
	IF IC THEN RENAME(DCHAN,NULL,0,ID);
	RELEASE(DCHAN);
	UNTELL
	END "LIREST";
_ PRSAVE;

_ Stores current prototype data-structure on DSK;

INTERNAL SIMPLE PROCEDURE PRSAVE;
	BEGIN "PRSAVE"
	INTEGER IA,IB,IC,ID,IE,IG;
	IF ¬NPRO THEN RETURN;
	TELL("prot-save");
	IF IC←EQU(PREXT,".TEM") THEN BEGIN PRFILE←"PRSAVE";PRPPN←NULL END;
	OPEN(IA←GETCHAN,"DSK",0,0,2,IDUM,BRAK1,EO);
	ENTER(IA,PRFILE&PREXT&PRPPN,IB);
	IF ¬IC THEN OUT(IA,"Number of prototypes: "&CVS(NPRO)&CL&CL&
		   "Max number    lines/prot: "&CVS(MAXPLS)&
		   "    vertices/prot: "&CVS(MAXPVS)&CL&CL&
		   "Total number of lines: "&CVS(PLTOT)&CL&CL&
		   "Total number of line-features: "&CVS(PLFTOT)&CL&CL&
		   "Total number of compound features: "&CVS(PCFTOT)&CL&CL&
		   "Feat.-to-prot. free storage ptr: "&CVS(PFFREE)&CL&CL&
		   "Prot-c.f.-pairs free storage ptr: "&CVS(PFREE)&
		   CL&CL&CL&CL);
	OUT(IA,"LIST OF PROTOTYPES"&CL&CL&CL&"* * * * * * *"&CL&CL);
	LOOP(ID,1,NPRO,1)
		BEGIN
		OUT(IA,"Prototype number: "&CVS(ID)&CL&CL&
		       "["&PNAME[ID]&"]"&CL&CL&
		       CVS(PLINES[ID])&" lines      "&CVS(PVERTS[ID])&
			       " vertices.      "&"Storage ptr: "&
		       CVS(PPTRL[ID])&CL&CL&@↓`bIl4(HJ>VQDJ¬2BbA
3'v)	2
baEA%5α1!
fK;∃76+πSW⊗)↓#?∨#π1%∩b
11∪)%_4PH$&BbA
≠↔∂#WK∃εK⊃	2∀a1EUJ04($HJB1!∀≠K?O~kK↔≠/∪↔;∂*↓#?∂&1%	d∩11IBI%l4PH&2>⎇↓"&∃c	2B2Lr⊗NnL"u1EHh($$L∩⊗≡&ph($$LzVQ"L	2∞14~1~BbB∞ZMDJ∃%2∀a1e%KX4($HJN⊗R4zJ6ε"A5EIc⊃%l4PH$&>-!"&¬eα1"∞4zM"BdJ:⊗~\J≡}&*ZBBR∀bn&∩jiFu%d∩11I∩I_4(HH%↓↓α↓↓↓α∧a"∞Z⎇→"B2Lr∃JnL:u%2∀a1IAJ04($HI↓↓↓α↓↓αBbB∞Z>~BB2&t*n&≡jI2
1c⊃M%%Xh($$M~⊗R~⎇∩6εQC↓1I$hP$$&,r⊃l4PH&>V"B&¬2≤a~∞12⊃)↓)αQ↓)↓R↓)↓)∩2∞1~≤a$4(HJ⊗:⊃Xh(&>-!"&¬d~1→
≤*:RJaα~⊗
"VJ∃∧"εR¬m~RJV≥"VJ∃∩2∞1~≤a~∞10h($%α↓	)↓R↓)↓)αQ↓)↓R⊃~∞14~1_4PI↓↓↓α↓↓αBbA
≠↔∂#WK∃εK⊃β;.k↔I∩b
11∪⊃%~BbA
≠↔∂#WK∃π;?K⊃αC?∂S∞a%	2∀a1IUHh($%5α1!
≡{7C3/C'Seα1βO∂.s∃/C⊗{Q9βε{';S/∪M↓#}≠Sπ1J⊃2
1c!U%%Xh(&2|zA"&"aE2B5">Q1
H4($L∩⊗≡&ph($&⎇*Q"&
b∞1~≤a~B1D~ZM"L!%2
baEU%KX4($M~⊗R~⎇∩6εQBiEI1∩Il4(HJ>VQDJ¬2BbB∞Z>~BB~2≥"n&∩jI2
1c⊃]%%Xh($&⎇*Q"&
bB1"≥2>M"∧2BRJ\J∩u%d∩11M*I%l4PH&N⊗$2>J6
!!A1∩H4($L*:⊃lhP&>V"B&¬2≤a~∞12⊃)↓)αQ↓)↓R↓)↓)∩2∞1~≤a~∞10h(%↓α↓↓↓↓∃αJ>R⎇"fB∃¬α>&:$*JM↓2α∞>6∧zV:⊃∧2⊗εR-∩∃αJ,2⊗J⊗t~⊗M	4~1~∞b2∞04PH%→	R↓)↓)αQ↓)↓R↓)	~≤a~∞15α1!
∞#∪K↔∨→	2
baEI%0h(%↓α↓↓↓↓¬α1!
ε{';S/∪M↓#π∪?Q76+πQ7v+cQ%F{∂SπbI	2
baM]%0h(%↓α↓↓↓↓¬α1!
ε{';S/∪M↓#π∪?Q76+πQ%α1↓
βε'KMπaαCπO⊃↓→βε{';S/⊃↓#?∨#π1%⊂h($%α↓↓2
baUe%KX4(&L:}B~∀*∃α6
AαB~5∩⊗∃lhP&2>⎇↓"&⊃c	2&≥k	1E$hP$&
,:&84PH&>V"B&¬2≤a~∞15α1"∞5→"&⊃Jb
11→%%lhP$&N-"~>Jl
Q!5⊃1I%Xh($&⎇*Q"&
bB1"L1α&⊂mα~~J,)αR",q↓	A∩α⊗2N*α∞Z>~BB~B∀zn&∩jI2
1c⊃e%_hP$%↓α↓↓↓↓¬α1"&2α&⊂v∧2J⊗∃¬""⊗9α⊃A	α,bN∃α≥2>M"∧2⊗εR\J∩u%d∩11Q:I%l4PH&N⊗$2>J6
!!A1∩H4($L*:⊃lhP&>V"B&¬2≤a~∞14~1→	R↓)↓)αQ↓)↓R↓)	~≤a%l4PJJ⊗2,
N∃"L	%l4PJV:R,b04(L*:⊃↓∃αJNε4)	l4P0aα¬∩J⊗N#X4(4QAαK↔∨#?K↔~βCK?&{SgC*βOSK.≠SWK*β≠K?jα∩N-Xh(4*LrR⊗Jt
1αNLjB2∃¬αJ>∞,"VJ∃¬αJJ⊗≥!l4(L∩⊗≡&r↓
BJ∀*NQλhP&2ε∀*1α>s	l4(LJ:R⊗<*Iα&
b&	2L→2&⊃dJ∃2&:b&∞
Xh(&&2↓"&∞|*FU"¬∩⊗bQb⊃:R⊗j⊃%$⊂,rBJ=¬""⊗9¬∩⊗RV∀ql4(LJ→α↑D*J∃u9αR",qα≡=∧z9ElhP&R⊗da!C⊗{Q7K/≠S?K*⊃%l4PJ>B⊗rB&ε}<*R∞"q1
∩≤Y	1Ac⊃1A1⊃A2
∀
-E2,y%l4PJ2>>]*A"&
b*V:]~RJ}¬∩~&2*2BJ⊗E!~BJ¬α92&∩Il4(LJ→α&∩αR"⊗rα
⊗≡Lqα>V%~RI!∀2&2∃α⊃~*VtZNRI2⊃α:>"α~>Vt!	~∞bIl4(HIαJ⊗d*εN∃DJ¬%m¬
⊗Im¬
J⊗R-∩9α⊗t!l4(LJ→⊗L→αR",p4($L∩⊗≡&ph($&uαJ>}LrR&9DJ¬%lhP$&6
BB2N|J:R&rB&¬%Xh($&l
bBZ≥z&:RLq"&¬KX4($Mα2R>%z&:RLq"&¬KX4($Mα~R>%y"B25">R}LrR&9DJ¬%%ZBB∞~$zR}&u"&9"L	%%lhP$&B42J⊗⊗|J:R&rB&¬%Xh($&∧2J⊗⊗|J:R&rB&¬%Xh($&L1α:B∀yz6buαJ<}∧bR>QtjεbBe!αR",p4($HJ
⊗≡Lp4($HJ6b:¬∩>⎇"uαJ=αl
aαBe">Q∃BI-MlhP$$&<B⊗J⊗{	]l4PH$&J-"VJ8hP$%↓α↓↓↓↓αα⊗:⊂hP$&⊗t!l4*|qEh&∃∩ε-F{↓l4(Lb>>ADJ⊃1EdrBJ=c	$4(HJ
⊗≡Lp4($M:"&2*α
Jε[λm
m∩α∩=αU*:.N%∩}&:¬*Q"&
aI%lhP$&Bt
6⊗nL"v}&uαVQ"L	1I%Xh($&∧b&:⊗≥Z&∩v|J:R&rB&¬%Xh($&¬2⊗JR≥Z&∩v|J:R&rB&¬%Xh($&¬αRJ2\J∩v}LrR&9DJ¬%lhP$&2|zA"&*aE2BdJ:⊗N\J∩u1
H4($HJ
⊗≡Lp4($HJ&∞∞|J:R&rB&¬%Xh($$LJ:BV"B&¬1	%l4PH$&BdJ:⊗~\J≡}&*ZBBR∀bn&∩jiFv}≥2="&uαVQ"L	1EMJIl4(HH&&:¬*Q"&
aEE%Xh($$Mα2&:+∩n&≡mz∞Z=DJ:BV"B&¬1→%%lhP$$&LrBVQDJ¬1E
Il4(HH&B2Lr⊗n&=j}∞ZzB&:B-!"&¬c	M%$hP$$&,r⊂4(HJ⊗:⊃Xh(&2|zA"&"aE2B5">Q1
H4($L∩⊗≡&ph($&L~∞}&u"&9"L	%l4PH&&:¬*Q"&
aEE%Xh($&∧22NR\J∩v}≥2="&uαVQ"L	1EMJIl4(HJ&:B-!"&¬c	E%lhP$&B5αRJnL"v}∞4y"&:¬*Q"&
aEM%Hh($&,r⊃l4PJ&
}∧2J⊗∃∧jεaα∧2~J⊗+X4(&dz>A"L!1E2L⊃5E1
H4($L∩⊗≡&ph($&L~∞}&u"&9"L	%l4PH&&:¬*Q"&
aEE%Xh($&∧2BJ>\J∩v}≥2="&uαVQ"L	1EMJIl4(HJ&:B-!"&¬c	E%lhP$&B4*εRnL"v}∞4y"&:¬*Q"&
aEM%Hh($&,r⊃l4PJ&→αL→αR",qαJ⊗t
6∃"L	2:Vda1A2L⊃%l4PJJ⊗2,
N∃"L	%l4PJV:R,b04(L*:⊃↓∃αJJ⊗≥!	l4P0aα<*R2&t*L4(N≠K↔π&)βπK⊗gMβ}1βπ∂&K[∃β∨3Mβπv!β∂[~β≠?IπβK?∂/≠O';:βeβ␈##↔IεS?MXh(4*¬∩>∞⊗%*J∃α<*R2&t*M"N2⊗aα∀*ε1α
∩Jεe∧~Y2N3YαJ⊗4*J⊗:≤)α&:$*≡⊗I∧→2M%Xh(&
,:&84PJ&:R,:⊗IαRb-21Xh(&N2⊗aαLrR⊗≡-⊃αεJ∀
eα∞u!2∞&[	j6εDr>ZuXh(&
¬yαMαz↓Al4PJ∞:R[
v⎇AXh(&ε∃∩
2QD~:Rm∃i2∞:%YFu2l
b:>2iE%l	LOOP (IA,1,MAXNOV,1) IF LVERSI[IA]>0 THEN
		BEGIN "GA"
		C ← C+1;
		CV[C,1] ← XVCOR[IA];
		CV[C,2] ← YVCOR[IA];
		CI[IA] ← C;
		END "GA" ELSE CI[IA] ← 0;
	LOOP (IA,1,MAXNOL,1) IF LACT(IA) THEN
		BEGIN "GB"
		S ← S+1;
		K ← IA*2;
		J ← K-1;
		SV[S,1] ← XLCOR[J];
		SV[S,2] ← YLCOR[J];
		SV[S,3] ← XLCOR[K];
		SV[S,4] ← YLCOR[K];
		SV[S,5] ← L ← CI[LVERCO[J]];
		CNT[L] ← CNT[L]+1;
		SV[S,6] ← L ← CI[LVERCO[K]];
		CNT[L] ← CNT[L]+1;
		SV[S,7] ← LCREDE[IA] LAND '7777
		END "GB";
	LOOP(IA,1,MAXNOV,1) IF ¬CNT[IA] THEN CV[IA,1]←CV[IA,2]←0;
	END "GETLINES";
_ OUTLINES;
_ output active lines to disk file;

INTERNAL PROCEDURE OUTLINES;
	BEGIN
	INTEGER BR, C, S, I;
	SAFEX REAL ARRAY CV[1:MAXNOV,1:2], SV[1:NOL*2,1:7];
	TELL("output struct");
	OPEN(4,"DSK",0,1,2,1000,BR,EO←1);
	IF EO THEN RETURN;
	ENTER(4,NAME&NOUT&".OUT",IDUM);
	NOUT ← NOUT+1;
	GETLINES(CV,SV,C,S);
	OUT(4,CVS(S)&CL);
	LOOP(IA,1,S,1)
		BEGIN "OA"
		SETFORMAT(15,6);
		LOOP(I,1,4,1) OUT(4,CVF(SV[IA,I]));
		SETFORMAT(15,0);
		LOOP(I,5,7,1) OUT(4,CVF(SV[IA,I]));
		OUT(4,CL);
		END "OA";
	OUT(4,CVS(C)&CL);
	SETFORMAT(15,6);
	LOOP(IA,1,C,1) OUT(4,CVS(IA)&CVF(CV[IA,1])&CVF(CV[IA,2])&CL);
	RELEASE(4);
	UNTELL;
	END "OUTLINES";

END "SAVRES";